El rol configurado en el proyecto CodeBuild funciona bien con el entorno de tiempo de ejecución, pero no funciona cuando ejecutamos un comando desde dentro del contenedor, dice "no se pueden ubicar las credenciales".
Déjame saber cómo podemos usar el papel fuera de la caja dentro del contenedor.
Puede utilizar la fuente de credenciales "EcsContainer" para asumir el rol sin problemas sin tener que exportar nuevas credenciales en su buildspec.yml.
credential_source: el proveedor de credenciales que se usará para obtener las credenciales para la llamada inicial de asumir el rol. Este parámetro no se puede proporcionar junto con source_profile. Los valores válidos son:
- Entorno para extraer las credenciales de origen de las variables de entorno.
- Ec2InstanceMetadata para usar el rol de instancia EC2 como credenciales de origen.
- EcsContainer para usar las credenciales del contenedor de ECS como las credenciales de origen.
De: https://docs.aws.amazon.com/cli/latest/topic/config-vars.html
Pasos:
Paso 0: cree un nuevo rol 'arn:aws:iam::0000000000:role/RoleToBeAssumed' y adjunte las políticas requeridas para proporcionar el permiso requerido para los comandos que está ejecutando durante la compilación.
Paso 1: agregue los permisos sts:assumeRole a su rol de servicio de CodeBuild. Aquí hay una política de muestra:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "sts:*", "Resource": "arn:aws:iam::0000000000:role/RoleToBeAssumed" } ] }Paso 2: configure su contenedor de compilación para usar los metadatos de la credencial como fuente para asumir el rol. Aquí hay un ejemplo de especificación de compilación:
version: 0.2 phases: install: runtime-versions: nodejs: 8 commands: - aws sts get-caller-identity - mkdir ~/.aws/ && touch ~/.aws/config - echo "[profile buildprofile]" > ~/.aws/config - echo "role_arn = arn:aws:iam::0000000000:role/RoleToBeAssumed" >> ~/.aws/config - echo "credential_source = EcsContainer" >> ~/.aws/config - aws sts get-caller-identity --profile buildprofileSi necesita ejecutar un contenedor Docker en un entorno de compilación y el contenedor requiere credenciales de AWS, debe transferir las credenciales del entorno de compilación al contenedor.
docker run -e AWS_DEFAULT_REGION -e AWS_CONTAINER_CREDENTIALS_RELATIVE_URI your-image-tag aws s3 lsOtra forma es asumir el rol manualmente y exportar los tokens de autenticación. Asegúrese de tener disponible ASSUME_ROLE_ARN como variable de entorno:
commands: - TEMP_ROLE=`aws sts assume-role --role-arn $ASSUME_ROLE_ARN --role-session-name temp` - export TEMP_ROLE - export AWS_ACCESS_KEY_ID=$(echo "${TEMP_ROLE}" | jq -r '.Credentials.AccessKeyId') - export AWS_SECRET_ACCESS_KEY=$(echo "${TEMP_ROLE}" | jq -r '.Credentials.SecretAccessKey') - export AWS_SESSION_TOKEN=$(echo "${TEMP_ROLE}" | jq -r '.Credentials.SessionToken') - docker push $ECR_IMAGE_URL:$IMAGE_TAG